"""
获取每日行业的净收入
f43：最新价 f44：最高 f45：最低 f46:今开 f47：总手数 f48：成交金额 f49：外盘
f50：量比 f51：涨停 f52：跌停 f55：收益  f58：股票名称 f60：昨收 f71:均价
f84:总股本 f85：流通股本 f92:每股净资产 f105:归属净利润 f116:总市值 f117：流通市值
f127：概念板块 f128：地域板块 f135:主力流入 f136:主力流出 f137:主力净流入 f138:超大单流入 f139:超大单流出
f140：净超大单 f141:大单净流入 f142:大单净流出 f143净大单 f144 中单净流入 f145: 中单净流出
f146:净中单 f147:小单净流入 f148：小单净流出 f149:净小单 f161：内盘 f162:动态市盈率 f163:静态市盈率
f164:ttm市盈率 f167：市净率 f168：换手率 f169:涨跌额 f170：涨幅 f173:净资产收益率
f183:营业总收入 f184:营业总收入同比增长 f185：归属净利润同比增长 f186:毛利率
f187:净利率 f188:负债率 f189：上市日期 f190: 每股未分配利润  f191:委比
f192:尾差 f31:卖5价格 f32:卖5手数 f33:卖4价格 f34:卖4手数 f35:卖3价格 f36:卖3手数
f37:卖2价格 f38:卖2手数 f39:卖1价格 f40:卖1手数 f19:买1价格 f20:买1手数
f17:买2价格 f18:买2手数 f15:买3价格 f16:买3手数 f13:买4价格 f14:买4手数
f11:买5价格 f12:买5手数
"""
import sys
sys.path.append("../")
import json

from frameworks.utils.RedisUtil import *
from model.StockBaseInfo import *
from prettytable import PrettyTable

redis = RedisUtil()
ck = "select_stock_cache"
rs = json.loads(redis.vget(ck))
allstockdata = {}
stock_codes = []
for option in rs:
    allstockdata[option["f57"]+"("+ option["f58"] +")"] = option
    stock_codes.append(option["f57"]+"("+ option["f58"] +")")

# 模拟股票数据，这里使用 DataFrame 存储
import pandas as pd
from prettytable import PrettyTable

# 模拟股票数据
stock_data = {
    '总手数': [],  # 总手数
    '成交金额': [],  # 成交金额
    '主力净流入': [],  # 主力净流入
    '净超大单': [],  # 净超大单
    '净大单': [],  # 净大单
    '净中单': [],  # 净中单
    '净小单': []  # 净小单
}
for code in stock_codes:
    stock_data["总手数"].append(round(float(allstockdata[code]["f47"])/100000000,2))
    stock_data["成交金额"].append(round(float(allstockdata[code]["f48"])/100000000,2))
    stock_data["主力净流入"].append(round(float(allstockdata[code]["f137"])/100000000,2))
    stock_data["净超大单"].append(round(float(allstockdata[code]["f140"])/100000000,2))
    stock_data["净大单"].append(round(float(allstockdata[code]["f143"])/100000000,2))
    stock_data["净中单"].append(round(float(allstockdata[code]["f146"])/100000000,2))
    stock_data["净小单"].append(round(float(allstockdata[code]["f149"])/100000000,2))

df = pd.DataFrame(stock_data)
df['股票代码'] = stock_codes

# 定义各指标的权重
weights = {
    '总手数': 0.1,
    '成交金额': 0.1,
    '主力净流入': 0.3,
    '净超大单': 0.15,
    '净大单': 0.15,
    '净中单': 0.1,
    '净小单': 0.1
}


# 数据标准化函数
def standardize(df):
    return (df - df.min()) / (df.max() - df.min())

# 标准化各指标数据，排除股票代码列
standardized_df = standardize(df.drop('股票代码', axis=1))

# 计算综合资金指标
df['综合资金指标'] = 0
for col, weight in weights.items():
    df['综合资金指标'] += standardized_df[col] * weight
df['综合资金指标'] = df['综合资金指标'].round(4)

# 根据综合资金指标进行排序
sorted_df = df.sort_values(by='综合资金指标', ascending=False)

# 使用 PrettyTable 输出排序后的股票数据
table = PrettyTable()
field_names = ['股票代码', '综合资金指标'] + list(stock_data.keys())
table.field_names = field_names
for _, row in sorted_df.iterrows():
    row_values = [row[col] for col in field_names]
    table.add_row(row_values)

print("排序后的股票数据：")
print(table)
